

import java.util.Collections;
public class quick{

	private static int list [];

	//constructor
	public quick(){
	list = new int [500];

	}
	//quien devuelve la cadena
	public static int [] getlista(){
	return list;
	}
    public static void quickSort(int[] datos, int largo)
	//llamando al metodo cicloordenado, que devolvera ya la cadena ya ordenada, por ultimo configura list
    {
        cicloordenado(datos, 0, largo-1);
		for(int e = 0; e<largo; e++){
			list[e]= datos[e];
		}
    }           
        
    public static void cicloordenado(int[] datosnu, int nuprimero, int nuultimo)

    {
        int pivot;
        if (nuprimero < nuultimo) {
		//al pivot se le dice cual va a ser su nueva pocicion, despues de haber puesto al primer dato en su pocicion correcta
            pivot = ordenador(datosnu, nuprimero, nuultimo);
			//luego ordena de forma igual la parte abajo del pivot
            cicloordenado(datosnu, nuprimero, pivot-1);
			//luego la parte arriba del pivot, esto lo hace haciendo referencia de este mismo ciclo
			//porque asi terminara hasta que pivot, sea igual que nuprimero, o nuultimo
            cicloordenado(datosnu, pivot+1, nuultimo);
        }
    }
    
	//es el dato que lleva el dato en el limite inferior a su pocicion correcta, devolviendo esta pocicion
    public static int ordenador(int[] data, int primero, int ultimo)
 
    {
        while (true) {
            // el limite inferior, se corre, acercandose al superior
            while ((primero < ultimo) && (data[primero] < data[ultimo]))
                ultimo--;
            if (primero < ultimo) {
			//si aun no ha terminado el ciiclo, cambia los valores entre la ultima pocicon y la primera acual
                intercambio(data, primero++, ultimo);
            } else {
                return primero;
            }
            // el limite superior retrocede, acercandose a el inferior
            while ((primero < ultimo) && (data[primero] < data[ultimo]))
				//si el dato de abajo es menor, no se realizara ninguncmabio, hasta que sea mayor que el superior
                primero++;
            if (primero < ultimo) {
				//si aun no ha terminado el ciiclo, cambia los valores entre la ultima pocicon y la primera acual
                intercambio(data, primero, ultimo--);
            } else {
				//fin del ciclo
                return ultimo;
            }
        }
    }
	//,etpdp que realiza el intercambio de datos entre pociciones
	public static void intercambio( int[] arr, int i, int j) {
  int t = arr[i];
  arr[i] = arr[j];
  arr[j] = t;
}
}


